import axios from 'axios'
import {ElMessage} from 'element-plus'

let showError = true
export const API = axios.create({
    baseURL: import.meta.env.VITE_ZC_API
})

axios.defaults.timeout = 10000 // 请求超时时间

// axios 请求拦截器
API.interceptors.request.use(
    (config: any) => {
        const token = localStorage.getAccessToken();
        if (token) {
            config.headers = config.headers || {}
            config.headers.Authorization = `Bearer ${token}`
        }
        return config
    },
    (error: any) => {
        ElMessage.warning('请求超时')
        return Promise.reject(error)
    }
)

API.interceptors.response.use(
    (res: any) => {
        // 200成功
        if (res.status == 200) {
            // 数据
            const data = res.data
            // 获取相应头信息
            const token = res.headers['x-token']
            const expire = res.headers['x-token-expire']
            if (token) {
                localStorage.setToken(token, expire)
            }
            if (data.code === '0') {
                return res.data
            } else if (data.code === '1003') {
                // // 清理token
                // localStorage.cleanToken()
            } else {
                ElMessage.error(res.data.msg);

                return res.data
            }
        }
        return res.data
    },
    (error: any) => {
        // 没有网络时 message的内容为"Network Error"
        if (error.code == 'ERR_NETWORK') {
            ElMessage.error('网络异常，稍后重试')
            // 在 1 秒后重新允许显示错误消息
            showError = false
            setTimeout(() => {
                showError = true
            }, 1000)
        }
        const responseCode = error.response.status
        switch (responseCode) {
            case 400:
                ElMessage.error('请求错误(400)')
                break
            case 401:
                // 清理token
                localStorage.cleanToken()
                // 如果不是首页，跳转到首页
                // if (router.history.current.path !== Consts.HOME_VIEW) {
                //     router.push(Consts.HOME_VIEW);
                // }
                break
            case 403:
                ElMessage.error('拒绝访问(403)')
                break
            case 404:
                ElMessage.error('请求出错(404)')
                break
            case 408:
                ElMessage.error('请求超时(408)')
                break
            case 500:
                ElMessage.error('服务器错误(500)')
                break
            case 501:
                ElMessage.error('服务未实现(501)')
                break
            case 502:
                ElMessage.error('网络错误(502)')
                break
            case 503:
                ElMessage.error('服务不可用(503)')
                break
            case 504:
                ElMessage.error('网络超时(504)')
                break
            case 505:
                ElMessage.error('HTTP版本不受支持(505)')
                break
            default:
                ElMessage.warning(`连接出错(${error.response.status})！`)
        }
        return Promise.reject(error.response.data)
    }
)
